home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / stat.c,v < prev    next >
Text File  |  1991-11-28  |  9KB  |  383 lines

  1. head     1.6;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.6.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.6
  10. date     89.11.20.12.57.52;  author mendel;  state Exp;
  11. branches 1.6.1.1;
  12. next     1.5;
  13.  
  14. 1.5
  15. date     89.05.18.17.06.50;  author rab;  state Exp;
  16. branches ;
  17. next     1.4;
  18.  
  19. 1.4
  20. date     89.04.12.16.04.54;  author ouster;  state Exp;
  21. branches ;
  22. next     1.3;
  23.  
  24. 1.3
  25. date     88.10.25.17.07.39;  author nelson;  state Exp;
  26. branches ;
  27. next     1.2;
  28.  
  29. 1.2
  30. date     88.08.07.17.38.00;  author ouster;  state Exp;
  31. branches ;
  32. next     1.1;
  33.  
  34. 1.1
  35. date     88.06.21.17.25.52;  author ouster;  state Exp;
  36. branches ;
  37. next     ;
  38.  
  39. 1.6.1.1
  40. date     91.11.27.21.37.28;  author kupfer;  state Exp;
  41. branches ;
  42. next     ;
  43.  
  44.  
  45. desc
  46. @@
  47.  
  48.  
  49. 1.6
  50. log
  51. @Fixed problem with handling of bogus spriteAttsPtr->permissions.
  52. @
  53. text
  54. @/* 
  55.  * stat.c --
  56.  *
  57.  *    Procedure to map from Unix *stat system calls to Sprite.
  58.  *
  59.  * Copyright 1986 Regents of the University of California
  60.  * All rights reserved.
  61.  */
  62.  
  63. #ifndef lint
  64. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/stat.c,v 1.5 89/05/18 17:06:50 rab Exp Locker: mendel $ SPRITE (Berkeley)";
  65. #endif not lint
  66.  
  67. #include "sprite.h"
  68. #include "fs.h"
  69. #include "compatInt.h"
  70.  
  71. #include <sys/types.h>
  72. #include <sys/stat.h>
  73.  
  74. static int CvtSpriteToUnixType();
  75.  
  76.  
  77. /*
  78.  *----------------------------------------------------------------------
  79.  *
  80.  * CvtSpriteToUnixAtts --
  81.  *
  82.  *    Procedure to convert the Sprite file system attributes 
  83.  *    structure to the Unix format.
  84.  *
  85.  * Results:
  86.  *    none.
  87.  *
  88.  * Side effects:
  89.  *     none.
  90.  *
  91.  *----------------------------------------------------------------------
  92.  */
  93.  
  94. static void
  95. CvtSpriteToUnixAtts(spriteAttsPtr, unixAttsPtr)
  96.     register    struct stat    *unixAttsPtr;
  97.     register    Fs_Attributes    *spriteAttsPtr;
  98. {
  99.     unixAttsPtr->st_dev        = spriteAttsPtr->domain;
  100.     unixAttsPtr->st_ino        = spriteAttsPtr->fileNumber;
  101.     unixAttsPtr->st_mode    = (spriteAttsPtr->permissions & 0xfff) |
  102.                     CvtSpriteToUnixType(spriteAttsPtr->type);
  103.     unixAttsPtr->st_nlink    = spriteAttsPtr->numLinks;
  104.     unixAttsPtr->st_uid        = spriteAttsPtr->uid;
  105.     unixAttsPtr->st_gid        = spriteAttsPtr->gid;
  106.     unixAttsPtr->st_rdev    = (spriteAttsPtr->devType << 8) |
  107.                   (spriteAttsPtr->devUnit & 0xff);
  108.     unixAttsPtr->st_size    = spriteAttsPtr->size;
  109.     unixAttsPtr->st_blksize    = spriteAttsPtr->blockSize;
  110.     unixAttsPtr->st_blocks    = spriteAttsPtr->blocks * 2;
  111.     unixAttsPtr->st_atime    = spriteAttsPtr->accessTime.seconds;
  112.     unixAttsPtr->st_spare1    = 0;
  113.     unixAttsPtr->st_mtime    = spriteAttsPtr->dataModifyTime.seconds;
  114.     unixAttsPtr->st_spare2    = 0;
  115.     unixAttsPtr->st_ctime    = spriteAttsPtr->descModifyTime.seconds;
  116.     unixAttsPtr->st_spare3    = 0;
  117.     unixAttsPtr->st_serverID    = spriteAttsPtr->serverID;
  118.     unixAttsPtr->st_version    = spriteAttsPtr->version;
  119.     unixAttsPtr->st_userType    = spriteAttsPtr->userType;
  120.     unixAttsPtr->st_devServerID = spriteAttsPtr->devServerID;
  121. }
  122.  
  123. /*
  124.  *----------------------------------------------------------------------
  125.  *
  126.  * CvtSpriteToUnixType --
  127.  *
  128.  *    Convert from Sprite file types to the IFMT mode bits of a unix file
  129.  *
  130.  * Results:
  131.  *    Unix file type bits.
  132.  *
  133.  * Side effects:
  134.  *     none.
  135.  *
  136.  *----------------------------------------------------------------------
  137.  */
  138.  
  139. static int
  140. CvtSpriteToUnixType(spriteFileType)
  141.     register    int spriteFileType;
  142. {
  143.     register unixModeBits;
  144.  
  145.     switch (spriteFileType) {
  146.     default:
  147.     case FS_FILE:
  148.         unixModeBits = S_IFREG;
  149.         break;
  150.     case FS_DIRECTORY:
  151.         unixModeBits = S_IFDIR;
  152.         break;
  153.     case FS_SYMBOLIC_LINK:
  154.         unixModeBits = S_IFLNK;
  155.         break;
  156.     case FS_DEVICE:
  157.     case FS_REMOTE_DEVICE:        /* not used */
  158.         unixModeBits = S_IFCHR;
  159.         break;
  160.     case FS_LOCAL_PIPE:        /* not used */
  161.     case FS_NAMED_PIPE:
  162.         unixModeBits = S_IFIFO;
  163.         break;
  164.     case FS_REMOTE_LINK:
  165.         unixModeBits = S_IFRLNK;
  166.         break;
  167.     case FS_PSEUDO_DEV:
  168.         unixModeBits = S_IFPDEV;
  169.         break;
  170.     }
  171.     return(unixModeBits);
  172. }
  173.  
  174.  
  175. /*
  176.  *----------------------------------------------------------------------
  177.  *
  178.  * stat --
  179.  *
  180.  *    Procedure to map from Unix stat system call to Sprite
  181.  *    Fs_GetAttributes.  
  182.  *
  183.  * Results:
  184.  *    UNIX_SUCCESS     - the call was successful.
  185.  *    UNIX_ERROR     - the call was not successful. 
  186.  *              The actual error code stored in errno.  
  187.  *
  188.  * Side effects:
  189.  *    The attributes of the specified file are stored in *attsBufPtr.
  190.  *    Errno may be modified.
  191.  *
  192.  *----------------------------------------------------------------------
  193.  */
  194.  
  195. int
  196. stat(pathName, attsBufPtr)
  197.     char *pathName;        /* The name of the file to stat */
  198.     struct stat *attsBufPtr;    /* ptr to buffer to hold attributes in 
  199.                    Unix format */
  200. {
  201.     ReturnStatus     status;    /* status returned by Fs_GetAttributes */
  202.     Fs_Attributes    spriteAtts;    /* buffer for attributes using
  203.                        Sprite format. */
  204.  
  205.     status = Fs_GetAttributes(pathName, FS_ATTRIB_FILE, &spriteAtts);
  206.     if (status != SUCCESS) {
  207.     errno = Compat_MapCode(status);
  208.     return(UNIX_ERROR);
  209.     } else {
  210.     CvtSpriteToUnixAtts(&spriteAtts, attsBufPtr);
  211.     return(UNIX_SUCCESS);
  212.     }
  213. }
  214.  
  215.  
  216. /*
  217.  *----------------------------------------------------------------------
  218.  *
  219.  * lstat --
  220.  *
  221.  *    Procedure to map from Unix lstat system call to Sprite
  222.  *    Fs_GetAttributes.  If the file specified is a symbolic link,
  223.  *    follow the link and perform Fs_GetAttributes again.
  224.  *
  225.  * Results:
  226.  *    UNIX_SUCCESS     - the call was successful.
  227.  *    UNIX_ERROR     - the call was not successful. 
  228.  *              The actual error code stored in errno.  
  229.  *
  230.  * Side effects:
  231.  *    The attributes of the specified file are stored in *attsBufPtr.
  232.  *    Errno may be modified.
  233.  *
  234.  *----------------------------------------------------------------------
  235.  */
  236.  
  237. int
  238. lstat(pathName, attsBufPtr)
  239.     char *pathName;        /* The name of the file to stat */
  240.     struct stat *attsBufPtr;    /* ptr to buffer to hold attributes in 
  241.                    Unix format */
  242. {
  243.     ReturnStatus     status;    /* status returned by Fs_GetAttributes */
  244.     Fs_Attributes    spriteAtts;    /* buffer for attributes using
  245.                        Sprite format. */
  246.  
  247.     status = Fs_GetAttributes(pathName, FS_ATTRIB_LINK, &spriteAtts);
  248.     if (status != SUCCESS) {
  249.     errno = Compat_MapCode(status);
  250.     return(UNIX_ERROR);
  251.     } else {
  252.     CvtSpriteToUnixAtts(&spriteAtts, attsBufPtr);
  253.     return(UNIX_SUCCESS);
  254.     }
  255. }
  256.  
  257.  
  258. /*
  259.  *----------------------------------------------------------------------
  260.  *
  261.  * fstat --
  262.  *
  263.  *    Procedure to map from Unix fstat system call to Sprite
  264.  *    Fs_GetAttributesID.  
  265.  *
  266.  * Results:
  267.  *    UNIX_SUCCESS     - the call was successful.
  268.  *    UNIX_ERROR     - the call was not successful. 
  269.  *              The actual error code stored in errno.  
  270.  *
  271.  * Side effects:
  272.  *    The attributes of the specified file are stored in *attsBufPtr.
  273.  *    Errno may be modified.
  274.  *
  275.  *----------------------------------------------------------------------
  276.  */
  277.  
  278. int
  279. fstat(fd, attsBufPtr)
  280.     int fd;            /* Descriptor for file to stat */
  281.     struct stat *attsBufPtr;    /* ptr to buffer to hold attributes in 
  282.                    Unix format */
  283. {
  284.     ReturnStatus     status;    /* status returned by Fs_GetAttributesID */
  285.     Fs_Attributes    spriteAtts;    /* buffer for attributes using
  286.                        Sprite format. */
  287.  
  288.     status = Fs_GetAttributesID(fd,  &spriteAtts);
  289.     if (status != SUCCESS) {
  290.     errno = Compat_MapCode(status);
  291.     return(UNIX_ERROR);
  292.     } else {
  293.     CvtSpriteToUnixAtts(&spriteAtts, attsBufPtr);
  294.     return(UNIX_SUCCESS);
  295.     }
  296. }
  297. @
  298.  
  299.  
  300. 1.6.1.1
  301. log
  302. @Initial branch for Sprite server.
  303. @
  304. text
  305. @d11 1
  306. a11 1
  307. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/stat.c,v 1.6 89/11/20 12:57:52 mendel Exp $ SPRITE (Berkeley)";
  308. @
  309.  
  310.  
  311. 1.5
  312. log
  313. @Added forward declarations for statics.
  314. @
  315. text
  316. @d11 1
  317. a11 1
  318. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/stat.c,v 1.4 89/04/12 16:04:54 ouster Exp Locker: rab $ SPRITE (Berkeley)";
  319. d48 1
  320. a48 1
  321.     unixAttsPtr->st_mode    = spriteAttsPtr->permissions |
  322. @
  323.  
  324.  
  325. 1.4
  326. log
  327. @Zero out unused fields of stat structures.
  328. @
  329. text
  330. @d11 1
  331. a11 1
  332. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/stat.c,v 1.3 88/10/25 17:07:39 nelson Exp $ SPRITE (Berkeley)";
  333. d20 2
  334. @
  335.  
  336.  
  337. 1.3
  338. log
  339. @Added device server ID.
  340. @
  341. text
  342. @d11 1
  343. a11 1
  344. static char rcsid[] = "$Header: stat.c,v 1.2 88/08/07 17:38:00 ouster Exp $ SPRITE (Berkeley)";
  345. d57 1
  346. d59 1
  347. d61 1
  348. @
  349.  
  350.  
  351. 1.2
  352. log
  353. @Be sure to fill in ALL the fields of a stat structure.
  354. @
  355. text
  356. @d11 1
  357. a11 1
  358. static char rcsid[] = "$Header: stat.c,v 1.1 88/06/21 17:25:52 ouster Exp $ SPRITE (Berkeley)";
  359. d62 1
  360. @
  361.  
  362.  
  363. 1.1
  364. log
  365. @Initial revision
  366. @
  367. text
  368. @d11 1
  369. a11 1
  370. static char rcsid[] = "$Header: stat.c,v 1.2 88/06/21 17:25:19 ouster Exp $ SPRITE (Berkeley)";
  371. d44 1
  372. a44 8
  373.     /*
  374.      * Try to cram the serverID into the virtual device so that
  375.      * the root of domain 1 (for example) on different servers have
  376.      * a different st_dev.  This makes pwd work correctly.  If serverID's
  377.      * become big we need to re-write the unix compatibility getwd() routine.
  378.      */
  379.     unixAttsPtr->st_dev        = (spriteAttsPtr->domain |
  380.                     (spriteAttsPtr->serverID << 8)) & 0xffff;
  381. d59 3
  382. @
  383.